'''
Request URL: http://www.kuwo.cn/url?format=mp3&rid=57162351&response=url&type=convert_url3&br=128kmp3&from=web&t=1581477237552&reqId=b5271120-4d45-11ea-9837-8de459364dfe
Request Method: GET
'''
import requests
import os
#headers:模仿浏览器登陆，csrf:令牌，Cookie：浏览器标识,User-Agent,Referer,之间需要，隔开
headers ={
    #防盗链接    key=歌手名
    "Referer": "http://www.kuwo.cn/search/list?key=%E9%9A%94%E5%A3%81%E8%80%81%E6%A8%8A",
    "csrf": "6JDZQ7ZZ85G",
    #相当于人的身份证
    "Cookie":"Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1581475213; _ga=GA1.2.599800638.1581475213; _gid=GA1.2.1113775986.1581475213; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1581476960; kw_token=6JDZQ7ZZ85G",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
}
#def 封装函数
def get_music(url):
    list_data = []
    response = requests.get(url,headers=headers).json()#模拟浏览器请求（headers）转换成json字典
    #print(response)
    data = response['data']['list']#取值，取data字典里边的list字典
    for i in data:#遍历这个字典
        rid = i['rid']#取所有的rid
        name = i['name']#取所有的name
        #print(rid,name)
        list_data.append((rid,name))#追加到list_data[]列表，第一个参数是rid,第二个参数是name
    return list_data#返回值，返回什么值，调用接受什么值。



    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    isExists = os.path.exists(path)
    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        # 创建目录操作函数
        os.makedirs(path)
def get_mp3(rid, name):
    url = 'http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web&t=1578151422297&reqId=30c88ba1-2f06-11ea-b29f-9110ed444226'.format(rid)
    result = requests.get(url,headers).json()#模拟浏览器（headers）请求得到的json数据转换成字典存储
    music_url = result['url']
    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    isExists = os.path.exists('Kang-酷我音乐')
    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        # 创建目录操作函数
        os.makedirs('Kang-酷我音乐')
    with open('Kang-酷我音乐/{}.mp3'.format(name),'wb')as f :
        print('正在下载{}'.format(name), end="")
        music = requests.get(music_url)#请求
        f.write(music.content)#写入二进制数据
        print('下载完毕')

def main():
    singer = input('请输入您喜欢的歌手名：')
    num = int(input('请输入下载页数：'))
    for x in range(1,num + 1):
        url = 'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={}&pn={}&rn=30&reqId=ce578760-2ee6-11ea-b524-17d2c7ba6bab'.format(singer,x)#format(将大括号里边的值变为参数)
        for i in  get_music(url):
            rid = i[0]#取i列表参数第一个
            name = i[1]#取i参数第二个
            get_mp3(rid, name)

main()



